package com.jxpanda.spring.module.pay.core.pojo;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class PaymentRequest<T> {

    /**
     * 和appId两个参数二选一必传
     * 即：appName和appId不能同时为空
     * <br>
     * 设计上是支持多个支付方式的，例如：支付宝和微信
     * 甚至支持同一个支付渠道的多个商户
     * appName和appId是用来定位支付渠道的，二选一必传
     * appId不方便记忆，appName方便，因此冗余一个appName的参数
     * 如果同时传递了appId和appName参数，则以appId为准
     */
    private String appName;

    /**
     * 和appName两个参数二选一必传
     * 即：appName和appId不能同时为空
     * <br>
     * 设计上是支持多个支付方式的，例如：支付宝和微信
     * 甚至支持同一个支付渠道的多个商户
     * appName和appId是用来定位支付渠道的，二选一必传
     * appId不方便记忆，appName方便，因此冗余一个appName的参数
     * 如果同时传递了appId和appName参数，则以appId为准
     */
    private String appId;

    /**
     * 支付渠道
     */
    private PaymentChannel channel;

    /**
     * 指令
     */
    private PaymentCommand command;

    /**
     * 请求数据
     */
    private T data;

    public static <T> PaymentRequestBuilder<T> of(Class<T> dataClass) {
        return PaymentRequest.builder();
    }

}
